home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 2000-10-15 | 12.5 KB | 583 lines |
- >!RunImage
- Clumps by Alan Trewartha
- findclump% 1200
- "LOAD <Clumps$Dir>.Code "+
- ~findclump%
- wd% 1500, menudata% 800, workspace% 1200, tiles% 4000, match% 4500,spritearea% 12000
- a%=0:b%=0:c%=0:d%=
- Gwstart%=workspace%:wsend%=workspace%+1200:quit%=
- :moves%=-1:rank%=1
- "taskname$="Clumps Game":!wd%=0
- "Wimp_Initialise",310,&4B534154,taskname$,wd%
- ,task%
- !wd%=-1:wd%!4=0:wd%!8=0
- $wd%!12=68:wd%!16=68:wd%!20=&3002
- 9$(wd%+24)="!clumps":
- "Wimp_CreateIcon",,wd%
- ihand%
- "Wimp_OpenTemplate",,"<Clumps$Dir>.Templates"
- %scoreswh%=
- makewindow("hiscores")
- infowh%=
- makewindow("Info")
- !panelwh%=
- makewindow("panel")
- prefwh%=
- makewindow("pref")
- tellwh%=
- makewindow("tell")
- "Wimp_CloseTemplate"
- score%=
- icontext(panelwh%,1)
- $score%="0"
- total%=
- icontext(panelwh%,2)
- $total%=""
- openmessages("<Clumps$Dir>.Resources")
- icontext(infowh%,0))=
- message("Name")
- icontext(infowh%,1))=
- message("Purpose")
- icontext(infowh%,2))=
- message("Author")
- icontext(infowh%,3))=
- message("Version")
- tell%=
- icontext(tellwh%,0)
- "!columns%=
- icontext(prefwh%,6)
- rows%=
- icontext(prefwh%,9)
- $"tilepix%=
- icontext(prefwh%,13)
- ease%=
- icontext(prefwh%,16)
- &-iconmenu%=
- makemenu(
- message("iconmenu"))
- iconmenu%!32=infowh%
- (-easemenu%=
- makemenu(
- message("easemenu"))
- closemessages
- openmessages("<ClumpsSave$Dir>.Preference")
- ,!$columns%=
- message("Columns")
- $rows%=
- message("Rows")
- $tilepix%=
- message("Tiles")
- /&b$=
- message("Ease"):easelevel%=
- 0($ease%=$(easemenu%+16+24*easelevel%)
- 1@a$=
- message("ViewStart"):wd%!0=prefwh%:wd%!4=18:wd%!12=2<<20
- a$="1"
- wd%!8=wd%!12
- wd%!8=0
- "Wimp_SetIconState",,wd%
- closemessages
- loadpix
- 7 nw%=
- icontext(prefwh%,6))
- 8 nh%=
- icontext(prefwh%,9))
- makegamewindow(wd%)
- "Wimp_CreateWindow",,wd%
- gamewh%
- loadscores
- openmessages("<Clumps$Dir>.Resources")
- error
- close:
- wimpmask%=%1110010000000
- "Wimp_Poll",wimpmask%,wd%
- reason%
- reason%
- redraw
- E=
- "Wimp_OpenWindow",,wd%:
- !wd%=gamewh%
- panel
- closewindow(!wd%)
- mouseclick
- keypress
- menuclick
- 17,18:
- receivemessage
-
- checkicon
- quit%
- closemessages
- savescores
- close
- redraw
- "Wimp_RedrawWindow",,wd%
- more%
- more%
- "Wimp_GetRectangle",,wd%
- more%
- mouseclick
- wd%!12
- wd%!8
- _"
- openwindow(gamewh%)
- `4
- openmenu(iconmenu%, !wd%-64, 96+6*44)
- a"
- openwindow(prefwh%)
- b
- gamewh%:
- wd%!16>-1
- clickicon(wd%!16)
- panelwh%:
- wd%!16=0
- startgame
- prefwh%:
- preferences
- tellwh%:
- wd%!16=1
- closewindow(tellwh%)
- menuclick
- c%=wd%+100
- "Wimp_GetPointerInfo",,c%
- adj%=(c%!8
- topmenu%
- iconmenu%:
- q-
- "Wimp_DecodeMenu",,topmenu%,wd%,c%
- !wd%
-
- startgame
- t"
- openwindow(prefwh%)
- u$
- openwindow(scoreswh%)
- v9
- "XOS_CLI","Filer_Run <Clumps$Dir>.!Help"
-
- 5:quit%=
- x
- easemenu%:
- easelevel%=!wd%+1
- {, $ease%=$(easemenu%+16+24*easelevel%)
- updateicon(prefwh%,16)
- adj%
- openmenu(topmenu%,topx%,topy%)
- keypress
- wd%!24=13
- !wd%=scoreswh%
- inputscore(0)
- makegamewindow(a%)
- current%=0
- a%!0=20
- a%!4=1000-h%*nh%
- a%!8=20+w%*nw%
- a%!12=1000
- a%!16=0
- a%!20=0
- a%!24=-1
- a%!28=&87030052
- a%!32=&01070207
- a%!36=&00120103
- a%!40=0
- a%!44=0
- a%!48=w%*nw%
- a%!52=h%*nh%
- a%!56=&3D
- a%!60=&3000
- a%!64=spritearea%
- a%!68=0
- $(a%+72)="Clumps"
- a%!84=0
- startgame
- inputscore(0)
- !wd%=gamewh%
- "Wimp_GetWindowState",,wd%
- minx%=wd%!4
- maxy%=wd%!16
- "Wimp_DeleteWindow",,wd%
- loadpix
- nw%=
- icontext(prefwh%,6))
- nh%=
- icontext(prefwh%,9))
- "OS_Module",6,,,90+(nw%*nh%)*32
- ,,bigblock%
- makegamewindow(bigblock%)
- bigblock%!0=minx%
- bigblock%!4=maxy%-h%*nh%
- bigblock%!8=minx%+w%*nw%
- bigblock%!12=maxy%
- bigblock%!84=nw%*nh%
- c%=bigblock%+88
- b%=1
- nw%:
- a%=1
- c%!0=b%*w%-w%
- c%!4=a%*h%-h%
- c%!8=b%*w%
- c%!12=a%*h%
- c%!16=%11000100011010
- & c%!20=tiles%+(b%*nh%-nh%+a%-1)*3
- , $(c%!20)=
- (5)))+"a":
- random tile
- c%!24=spritearea%:c%!28=2
- c%+=32
- "Wimp_CreateWindow",,bigblock%
- gamewh%
- openwindow(gamewh%)
- "OS_Module",7,,bigblock%
- $score%="0"
- $total%=
- (nw%*nh%)
- updateicon(panelwh%,1)
- updateicon(panelwh%,2)
- findclumps
- findclumps
- B%=match%
- C%=tiles%
- D%=nw%
- E%=nh%
- (findclump%)=0
- finished
- finished
- $tiles%="00"
- $ $tell%=
- message("Win"):rank%=5
- & $tell%=
- message("Lose"):rank%=10
- ($score%)/(nw%*nh%)
- icontext(scoreswh%,(rank%)*2+2))
- inthetable
- openwindow(tellwh%)
- inthetable
- $tiles%="00"
- $tell%=
- message("WinHigh")
- $tell%=
- message("LoseHigh")
- b%<5
- icontext(scoreswh%,(rank%-b%)*2+2))
- icontext(scoreswh%,(rank%-b%+1)*2+2)=$
- icontext(scoreswh%,(rank%-b%)*2+2)
- icontext(scoreswh%,(rank%-b%+1)*2+3)=$
- icontext(scoreswh%,(rank%-b%)*2+3)
- b%+=1
- rank%=rank%-b%+1
- icontext(scoreswh%,(rank%)*2+2)=$score%+"/"+
- (nw%*nh%)
- icontext(scoreswh%,(rank%)*2+3)=""
- openwindow(scoreswh%)
- "Wimp_ForceRedraw",scoreswh%,0,-1024,1024,0
- inputscore(1)
- inputscore(a%)
- wd%!0=scoreswh%
- wd%!4= rank%*2+3
- wd%!8=&F024*a%
- wd%!12=&F024
- "Wimp_SetIconState",,wd%
- updateicon(scoreswh%,rank%*2+3)
- a%=1
- "Wimp_SetCaretPosition",scoreswh%,rank%*2+3,,,-1,0
- "Wimp_SetCaretPosition",-1,-1
- clickicon(i%)
- current%<>0
- setclump(0,"00")
- - $total%=
- ($total%)-(?clumplist%-1)/2)
- 3 $score%=
- ($score%)+((?clumplist%-1)/2-1)^2)
- updateicon(panelwh%,1)
- updateicon(panelwh%,2)
- current%=0
- collapse
- findclumps
- collapse
- high%=
- (high%/nh%)*nh%+nh%
- a%=low%
- )minx%=2048:miny%=2048:maxx%=0:maxy%=0
- (a%/nh%)*nh%=a%
-
- (low%/nh%)*nh%=low%
- &
- low%<>a%
- high%=nw%*nh%-1
-
- $(tiles%+low%*3)="00"
-
- markicon(low%)
- " low%=
- (low%/nh%)*nh%+nh%
- $(tiles%+a%*3+1)="a"
- (low%<>a%)
- ) $(tiles%+low%*3)=$(tiles%+a%*3)
-
- markicon(low%)
- $(tiles%+a%*3)="00"
-
- markicon(a%)
-
- low%+=1
- a%+=1
- a%>high%
- "Wimp_ForceRedraw",gamewh%,minx%,miny%,maxx%,maxy%
- markicon(i%)
- !wd%=gamewh%
- wd%!4=i%
- "Wimp_GetIconState",,wd%
- wd%!8 < minx%
- minx%=wd%!8
- wd%!12< miny%
- miny%=wd%!12
- wd%!16> maxx%
- maxx%=wd%!16
- wd%!20> maxy%
- maxy%=wd%!20
- checkicon
- "Wimp_GetPointerInfo",,wd%
- (wd%!12=gamewh%)
- (wd%!16>-1)
- newcurr%=match%?wd%!16
- newcurr%=0
- current%<>newcurr%
- setclump(1,"a")
- current%=newcurr%
- setclump(1,"b")
- setclump(b%,a$)
- low%=nw%*nh%
- high%=0
- current%<>0
- <% clump%=1:clumplist%=match%+1536
- current%<>clump%:clumplist%+=?clumplist%:clump%+=1:
- a%=1
- ?clumplist%-1
- ? c%=clumplist%!a%
- &FFFF
- c%<low%
- low%=c%
- c%>high%
- high%=c%
- $(tiles%+c%*3+b%)=a$
- C#
- PROCupdateicon(gamewh%,c%)
- D9 !wd%=gamewh%:wd%!4=c%:
- "Wimp_GetIconState",,wd%
- E@
- "Wimp_ForceRedraw",gamewh%,wd%!8,wd%!12,wd%!16,wd%!20
- preferences
- wd%!16
- M$ c%=
- ($columns%):c%=c%+(c%>5)
- N. $columns%=
- (c%):
- updateicon(prefwh%,6)
- P% c%=
- ($columns%):c%=c%-(c%<40)
- Q. $columns%=
- (c%):
- updateicon(prefwh%,6)
- S! c%=
- ($rows%):c%=c%+(c%>5)
- T+ $rows%=
- (c%):
- updateicon(prefwh%,9)
- V" c%=
- ($rows%):c%=c%-(c%<30)
- W+ $rows%=
- (c%):
- updateicon(prefwh%,9)
- "XOS_CLI","Filer_OpenDir <Clumps$Dir>.Tiles"
- Z5 wd%!0=prefwh%:
- "Wimp_GetWindowOutline",,wd%
- [G topx%=wd%!4+38:topy%=wd%!8+100:
- openmenu(easemenu%,topx%,topy%)
- ]0 file% =
- ("<ClumpsSave$Dir>.Preference")
- ^&
- #file%, "Columns:"+$columns%
- _
- #file%, "Rows:"+$rows%
- `$
- #file%, "Tiles:"+$tilepix%
- a%
- #file%, "Ease:"+
- easelevel%
- b: c%=
- icontext(prefwh%,18):c%=-((wd%!24
- 2<<20)<>0)
- c"
- #file%, "ViewStart:"+
- #file%
- icontext(w%,i%)
- !wd%=w%:wd%!4=i%
- "Wimp_GetIconState",,wd%
- =wd%!28
- updateicon(w%,i%)
- o&wd%!0=w%:wd%!4=i%:wd%!8=0:wd%!12=0
- "Wimp_SetIconState",,wd%
- error
- !wd%=
- !wd%
- 1<<30:err_str$="":box%=3
- :err_str$=" at line "+
- :box%=2
- $(wd%+4)=
- $+err_str$+
- "Wimp_ReportError",wd%,box%,taskname$
- ,response%
- =(response%=2)
- close
- "Wimp_CloseDown",task%,&4B534154
- receivemessage
- wd%!16
- 0:quit%=
- changepix
- changepix
- term(wd%+44):a$=$(wd%+44):b$=a$
- a$,"."):a$=
- a$,".")+1):
- wd%!40=&ff9
- "Wimp_GetPointerInfo",,wd%+100
- wd%!112=prefwh%
- @
- "XOS_CLI","COPY "+b$+" <Clumps$Dir>.Tiles."+a$+" N~CV"
- wd%!12=wd%!8:wd%!16=4
- *
- "Wimp_SendMessage",17,wd%,wd%!4
- $tilepix%=a$
- ) file%=
- ("<Clumps$Dir>.Tiles."+a$)
- size%=
- #file%+4:
- #file%
- .
- size%>12000
- $tilepix%="Numbers":
- updateicon(prefwh%,13)
- loadpix
- ,file%=
- ("<Clumps$Dir>.Tiles."+$tilepix%)
- size%=
- #file%+4:
- #file%
- (!spritearea%=size%: spritearea%!8=16
- "OS_SpriteOp",256+9,spritearea%
- "OS_SpriteOp",256+10,spritearea%,"<Clumps$Dir>.Tiles."+$tilepix%
- "OS_SpriteOp",40+256,spritearea%,"00"
- ,,,w%,h%,,mode%
- "OS_ReadModeVariable",mode%,4
- ,,a%
- w%=w%*2^a%
- "OS_ReadModeVariable",mode%,5
- ,,a%
- h%=h%*2^a%
- term(a%)
- a%?n%>31
- n%+=1
- a%?n%=13
- makemenu(menu$)
- start%=menudata%
- 5menudata%!12=&0277:menudata%!20=44:menudata%!24=0
- ;item$=
- menu$,
- menu$,"|")-1):menu$=
- menu$,
- menu$,"|")+1)
- $(menudata%)=item$
- width%=
- (item$)-3
- menudata%+=28
- = item$=
- menu$,
- menu$,"|")-1):menu$=
- menu$,
- menu$,"|")+1)
- ! !menudata%=0:menudata%!4=-1
- item$>width%
- width%=
- item$
- item$<12
- 3 menudata%!8=&07000021:$(menudata%+12)=item$
- E menudata%!8=&07000121:menudata%!12=workspace%:menudata%!16=-1
- menudata%!20=
- item$+1
- . $workspace%=item$:workspace%+=
- item$+1
- menudata%+=24
- menu$=""
- !(menudata%-24)=&80
- start%!16=width%*16+32
- =start%
- openmenu(menu%,x%,y%)
- $topmenu%=menu%:topx%=x%:topy%=y%
- "Wimp_CreateMenu",,menu%,x%,y%
- openwindow(handle%)
- !wd%=handle%
- "Wimp_GetWindowState",,wd%
- "Wimp_OpenWindow",,wd%
- handle%=gamewh%
- panel
- handle%=tellwh%
- "Wimp_GetWindowOutline",,wd%
- wd%?20=1
- wd%!21=wd%!4
- wd%!23=wd%!8
- wd%!25=wd%!12
- wd%!27=wd%!16
- "OS_Word",21,wd%+20
- panel
- (minx%=wd%!4:miny%=wd%!8:maxx%=wd%!12
- !wd%=panelwh%
- "Wimp_GetWindowState",,wd%
- :wd%!4=minx%:wd%!12=maxx%:wd%!16=miny%-2:wd%!28=gamewh%
- "Wimp_OpenWindow",,wd%
- closewindow(handle%)
- !wd%=handle%
- "Wimp_CloseWindow",,wd%
- handle%=gamewh%
- closewindow(panelwh%)
- handle%=tellwh%
- ?wd%=1:wd%!1=&80008000:wd%!5=&7FFF7FFF:
- "OS_Word",21,wd%
- openmessages(file$)
- "MessageTrans_FileInfo",,file$
- "OS_Module",6,,,21+
- (file$)
- ,,messageloc%
- ,$(messageloc%+20)=file$:messageloc%!16=0
- "MessageTrans_OpenFile",messageloc%,messageloc%+20,0
- message(mess$)
- "MessageTrans_Lookup",messageloc%,mess$,0,0,0,0,0,0
- ,,mess$
- =mess$
- closemessages
- "MessageTrans_CloseFile",messageloc%
- "OS_Module",7,,messageloc%
- makewindow(a$)
- "Wimp_LoadTemplate",,wd%,workspace%,wsend%,-1,a$,0
- ,,workspace%
- "Wimp_CreateWindow",,wd%
- loadscores
- ,file% =
- ("<ClumpsSave$Dir>.ScoreTable")
- a%=4
- a$ = ""
- b% =
- #file%
- b%<>10
- a$ +=
- b% =
- #file%
- icontext(scoreswh%,a%)=a$
- #file%
- savescores
- ,file% =
- ("<ClumpsSave$Dir>.ScoreTable")
- a%=4
- 23
- #file%, $
- icontext(scoreswh%,a%)
- #file%
-